Como es habitual, cargamos las librerías que necesitamos al inicio del documento.
Utilizaremos una versión parecida del conjunto de datos
Qualitative_Bankruptcy Data Set del repositorio UCI
Machine Learning para trabajar el estudio de las variables
Categóricas/Cualitativas y la bondad de las reglas de Asociación para
extraer conocimiento de un conjunto de datos, en este caso, predecir la
bancarrota (Bankruptcy) en base a parámetros
cuantitativos/cualitativos preparados por expertos.
Cargamos el fichero Qualitative_Bankruptcy.num.txt y
creamos el data.frame QB.
Asignamos nombres válidos a las columnas del data.frame
(make.names se usa para asegurarnos que no contiene
símbolos raros). Hay más información en el fichero
Qualitative_Bankruptcy.info.txt
La información sobre este conjunto de datos se muestra a continuación:
'data.frame': 250 obs. of 7 variables:
$ Industrial.Risk : num 9.5487 0.0871 6.0553 8.3944 1.2821 ...
$ Management.Risk : num 9.53 1.79 4.92 9.55 1 ...
$ Financial.Flexibility: num 5.34 4.52 4.32 8.88 9.39 ...
$ Credibility : num 6.3 4.12 3.69 9.54 8.34 ...
$ Competitiveness : num 5.74 4.4 3.74 9.7 9.61 ...
$ Operating.Risk : num 9.3 1.84 5.55 9.77 1.31 ...
$ Bankruptcy : Factor w/ 2 levels "B","NB": 2 2 2 2 2 2 2 2 2 2 ...
Industrial.Risk Management.Risk Financial.Flexibility Credibility Competitiveness Operating.Risk
1 9.54873698 9.531917 5.335235 6.304893 5.741153 9.298113
2 0.08713305 1.785630 4.517538 4.118767 4.399522 1.842645
3 6.05525601 4.918437 4.322067 3.692966 3.738189 5.549685
4 8.39444838 9.551693 8.884186 9.538757 9.698978 9.773618
5 1.28213393 1.001431 9.394542 8.343431 9.610833 1.307226
6 5.06348125 5.305187 9.518323 8.678203 9.990089 5.149863
Bankruptcy
1 NB
2 NB
3 NB
4 NB
5 NB
6 NB
En primer lugar, para poner un poco de contexto de lo que estamos haciendo, se explica un poco las variables que aparecen en el conjunto de datos.
Industrial Risk (Riesgo industrial). Se refiere al
riesgo asociado con el sector en el que opera la empresa. Ciertos
sectores pueden ser más volátiles o estar más expuestos a factores
macroeconómicos que otros.
Management Risk (Riesgo de gestión). Este indicador
evalúa la calidad de la gestión de la empresa. Se centra en la capacidad
de los directivos para tomar decisiones efectivas, implementar
estrategias exitosas y gestionar eficazmente los recursos.
Financial Flexibility (Flexibilidad financiera). Se
refiere a la capacidad de la empresa para manejar cambios en su
estructura financiera y cumplir con sus obligaciones financieras,
especialmente en situaciones adversas como una disminución de ingresos o
aumento de costos.
Credibility (Credibilidad). Evalúa la reputación de
empresa en el mercado. Una buena reputación puede influir en la
capacidad de la empresa para atraer inversionistas, clientes y socios,
mientras que una mala reputación puede tener el efecto opuesto.
Competitiveness (Competitividad). Se refiere a la
capacidad de la empresa para competir con éxito en su mercado objetivo.
Puede incluir factores como la calidad de productos o servicios,
eficiencia operativa, innovación, capacidad de adaptación a condición de
mercado, etc.
Operating Risk (Riesgo operativo). Este evalúa el
riesgo asociado con las operaciones comerciales diarias de la empresa.
Esto puede incluir riesgos relacionados con la cadena de suministro, la
calidad del producto, seguridad laboral, entre otros.
Estas variables, en resumen, nos proporcionan una visión holística de
la salud financiera y operativa de una empresa, lo que permite a los
analistas y inversores evaluar su riesgo de bancarrota (relacionado con
Bankruptcy).
Las variables numéricas representan un valor entre 0 y 10 e indican
la valoración del experto para cada variable. Discretizaremos estas en 3
factores ordenados QB de manera no
supervisada, con el objetivo de estimar la clase
Bankruptcy.
La etiqueta asociada a valores bajos será N (negative),
la etiqueta de valores altos será P (positive) y el resto
corresponderá a la etiqueta A (average).
Se utiliza la función discretize() del paquete
arules con cada método que este nos ofrece
(interval, frequency y
cluster).
Nos aseguramos que todas las variables son factores de 3 niveles
ordenados que además respetan N < A <
P. Además, la primera clase de Bankruptcy será
la de etiqueta B (bancarrota).
[1] "Para el método interval el primer nivel de la clase Bankruptcy es: B"
[1] "Para el método frequency el primer nivel de la clase Bankruptcy es: B"
[1] "Para el método cluster el primer nivel de la clase Bankruptcy es: B"
List of 3
$ interval :'data.frame': 250 obs. of 7 variables:
..$ Industrial.Risk : Ord.factor w/ 3 levels "N"<"A"<"P": 3 1 2 3 1 2 3 3 3 3 ...
..$ Management.Risk : Ord.factor w/ 3 levels "N"<"A"<"P": 3 1 2 3 1 2 3 3 3 3 ...
..$ Financial.Flexibility: Ord.factor w/ 3 levels "N"<"A"<"P": 2 2 2 3 3 3 2 3 2 1 ...
..$ Credibility : Ord.factor w/ 3 levels "N"<"A"<"P": 2 2 2 3 3 3 3 2 3 2 ...
..$ Competitiveness : Ord.factor w/ 3 levels "N"<"A"<"P": 2 2 2 3 3 3 3 2 2 3 ...
..$ Operating.Risk : Ord.factor w/ 3 levels "N"<"A"<"P": 3 1 2 3 1 2 3 3 3 3 ...
..$ Bankruptcy : Factor w/ 2 levels "B","NB": 2 2 2 2 2 2 2 2 2 2 ...
$ frequency:'data.frame': 250 obs. of 7 variables:
..$ Industrial.Risk : Ord.factor w/ 3 levels "N"<"A"<"P": 3 1 2 3 1 2 3 3 3 3 ...
..$ Management.Risk : Ord.factor w/ 3 levels "N"<"A"<"P": 3 2 2 3 1 2 3 3 3 3 ...
..$ Financial.Flexibility: Ord.factor w/ 3 levels "N"<"A"<"P": 2 2 2 3 3 3 2 3 3 2 ...
..$ Credibility : Ord.factor w/ 3 levels "N"<"A"<"P": 2 2 2 3 3 3 3 2 3 2 ...
..$ Competitiveness : Ord.factor w/ 3 levels "N"<"A"<"P": 2 2 2 3 3 3 3 2 2 3 ...
..$ Operating.Risk : Ord.factor w/ 3 levels "N"<"A"<"P": 3 2 2 3 1 2 3 3 3 3 ...
..$ Bankruptcy : Factor w/ 2 levels "B","NB": 2 2 2 2 2 2 2 2 2 2 ...
$ cluster :'data.frame': 250 obs. of 7 variables:
..$ Industrial.Risk : Ord.factor w/ 3 levels "N"<"A"<"P": 3 1 2 3 1 2 3 3 3 3 ...
..$ Management.Risk : Ord.factor w/ 3 levels "N"<"A"<"P": 3 1 2 3 1 2 3 3 3 3 ...
..$ Financial.Flexibility: Ord.factor w/ 3 levels "N"<"A"<"P": 2 2 2 3 3 3 2 3 2 2 ...
..$ Credibility : Ord.factor w/ 3 levels "N"<"A"<"P": 2 2 2 3 3 3 3 2 3 2 ...
..$ Competitiveness : Ord.factor w/ 3 levels "N"<"A"<"P": 2 2 2 3 3 3 3 2 2 3 ...
..$ Operating.Risk : Ord.factor w/ 3 levels "N"<"A"<"P": 3 1 2 3 1 2 3 3 3 3 ...
..$ Bankruptcy : Factor w/ 2 levels "B","NB": 2 2 2 2 2 2 2 2 2 2 ...
Realizaremos a continuación un breve estudio del conjunto
discretizado para determinar si es apropiado resolver el problema de
clasificación correcta de la variable Bankruptcy.
A continuación, se calculan las tablas de frecuencia correspondientes
a cada una de las clases discretizadas anteriormente. Estas se mostrarán
de una manera visual con gráficos de barras, haciéndose una diferencia
entre los distintos tipos de method en el
discretize().
$interval
Figure 1. Frecuencias para las distintas variables con los distintos métodos
$frequency
Figure 1. Frecuencias para las distintas variables con los distintos métodos
$cluster
Figure 1. Frecuencias para las distintas variables con los distintos métodos
Observamos cómo las frecuencias dependen en medida de cómo se ejecuta
la discretización de las variables numéricas a categóricas con la
función discretize() y sus diferentes method.
Aparece una mayor diferencia en el método frequency, en el
que las variables anteriormente numéricas (todas menos
Bankruptcy) pasan a tener todas las categorías con igualdad
de frecuencia para cada una de las clases.
Por otra parte, los métodos interval y
cluster son muy similares en este caso.
Figure 2. Diferencias a la hora de discretizar entre los distintos métodos
En estos gráficos puede apreciarse lo que se comentó anteriormente de
las diferencias entre los distintos métodos para discretizar.
Observamos que la discretización por cluster y
interval ha cogido como valor N (Negative)
aproximadamente entre 0 y 3. La categoría A (Average) queda
entre 3 y 7, mientras que la de P (Positive) de 7 a
10.
Hemos visto también que en estas dos formas de discretización se
asignan más valores de N que de las otras categorías para
todas las variables del conjunto de datos. Esto nos puede llevar a
pensar que ha habido cierta tendencia a valorar de manera algo estricta
las cosas.
Pasamos a obtener la relación entre las variables (matrices de
contingencia). Determinaremos el grado de asociación utilizando la
V de Cramer (CramerV).
Utilizaremos la función PairApply de la libería
DescTools para calcular estadísticos para todos los pares.
La función PlotCorr permite representar estos
resultados.
Representamos la matriz de valores de coeficientes de Cramer, medida que nos informa sobre la asociación entre variables categóricas. Es una versión normalizada del estadístico de chi-cuadrado, oscilando su valor entre 0 y 1.
$interval
Industrial.Risk Management.Risk Financial.Flexibility Credibility
Industrial.Risk 1.00000000 0.2768026 0.1278990 0.07578456
Management.Risk 0.27680255 1.0000000 0.1721687 0.22235111
Financial.Flexibility 0.12789902 0.1721687 1.0000000 0.43285224
Credibility 0.07578456 0.2223511 0.4328522 1.00000000
Competitiveness 0.18638785 0.2356602 0.5351123 0.51383238
Operating.Risk 0.19011872 0.2112877 0.1525809 0.19367362
Bankruptcy 0.24657118 0.3540167 0.7987151 0.77695269
Competitiveness Operating.Risk Bankruptcy
Industrial.Risk 0.1863878 0.1901187 0.2465712
Management.Risk 0.2356602 0.2112877 0.3540167
Financial.Flexibility 0.5351123 0.1525809 0.7987151
Credibility 0.5138324 0.1936736 0.7769527
Competitiveness 1.0000000 0.2070005 0.9439226
Operating.Risk 0.2070005 1.0000000 0.2839357
Bankruptcy 0.9439226 0.2839357 1.0000000
$frequency
Industrial.Risk Management.Risk Financial.Flexibility Credibility
Industrial.Risk 1.00000000 0.1755159 0.1913789 0.07567993
Management.Risk 0.17551590 1.0000000 0.1490586 0.22467354
Financial.Flexibility 0.19137892 0.1490586 1.0000000 0.32962192
Credibility 0.07567993 0.2246735 0.3296219 1.00000000
Competitiveness 0.20318692 0.2272072 0.4249897 0.44882799
Operating.Risk 0.12935814 0.1464825 0.1676059 0.18584326
Bankruptcy 0.23529894 0.3529663 0.6769425 0.75864839
Competitiveness Operating.Risk Bankruptcy
Industrial.Risk 0.2031869 0.1293581 0.2352989
Management.Risk 0.2272072 0.1464825 0.3529663
Financial.Flexibility 0.4249897 0.1676059 0.6769425
Credibility 0.4488280 0.1858433 0.7586484
Competitiveness 1.0000000 0.1573110 0.8492680
Operating.Risk 0.1573110 1.0000000 0.2744670
Bankruptcy 0.8492680 0.2744670 1.0000000
$cluster
Industrial.Risk Management.Risk Financial.Flexibility Credibility
Industrial.Risk 1.0000000 0.2902444 0.1403234 0.0839629
Management.Risk 0.2902444 1.0000000 0.1881195 0.2224409
Financial.Flexibility 0.1403234 0.1881195 1.0000000 0.4511258
Credibility 0.0839629 0.2224409 0.4511258 1.0000000
Competitiveness 0.1944503 0.2582474 0.5645759 0.5371390
Operating.Risk 0.1981832 0.2252978 0.1602153 0.2002050
Bankruptcy 0.2532646 0.3600621 0.8127894 0.7923489
Competitiveness Operating.Risk Bankruptcy
Industrial.Risk 0.1944503 0.1981832 0.2532646
Management.Risk 0.2582474 0.2252978 0.3600621
Financial.Flexibility 0.5645759 0.1602153 0.8127894
Credibility 0.5371390 0.2002050 0.7923489
Competitiveness 1.0000000 0.2080175 0.9682845
Operating.Risk 0.2080175 1.0000000 0.2838725
Bankruptcy 0.9682845 0.2838725 1.0000000
La última columna corresponde a los valores que tienen las distintas
variables predictoras con la variable Bankruptcy. Un valor
de CramerV superior a 0.7 está catalogado como una fuerte relación entre
variables categóricas (ver ?Cramer), implicando que
Financial.Flexibility, Credibility y, sobre
todo Competitiveness, muestran una clara dependencia sobre
el valor obtenido paraBankruptcy.
Se muestran a continuación las matrices de contingencia entre las
diferentes variables respecto a Bankruptcy.
$interval
$interval[[1]]
Industrial.Risk
Bankruptcy N A P
B 55 25 27
NB 39 49 55
$interval[[2]]
Management.Risk
Bankruptcy N A P
B 73 21 13
NB 48 44 51
$interval[[3]]
Financial.Flexibility
Bankruptcy N A P
B 102 4 1
NB 21 63 59
$interval[[4]]
Credibility
Bankruptcy N A P
B 87 16 4
NB 9 53 81
$interval[[5]]
Competitiveness
Bankruptcy N A P
B 104 3 0
NB 4 47 92
$interval[[6]]
Operating.Risk
Bankruptcy N A P
B 64 23 20
NB 50 30 63
$frequency
$frequency[[1]]
Industrial.Risk
Bankruptcy N A P
B 49 31 27
NB 34 52 57
$frequency[[2]]
Management.Risk
Bankruptcy N A P
B 50 41 16
NB 33 42 68
$frequency[[3]]
Financial.Flexibility
Bankruptcy N A P
B 70 35 2
NB 13 48 82
$frequency[[4]]
Credibility
Bankruptcy N A P
B 78 25 4
NB 5 58 80
$frequency[[5]]
Competitiveness
Bankruptcy N A P
B 83 24 0
NB 0 59 84
$frequency[[6]]
Operating.Risk
Bankruptcy N A P
B 48 38 21
NB 35 45 63
$cluster
$cluster[[1]]
Industrial.Risk
Bankruptcy N A P
B 54 27 26
NB 37 52 54
$cluster[[2]]
Management.Risk
Bankruptcy N A P
B 73 21 13
NB 47 45 51
$cluster[[3]]
Financial.Flexibility
Bankruptcy N A P
B 102 4 1
NB 19 66 58
$cluster[[4]]
Credibility
Bankruptcy N A P
B 87 16 4
NB 7 57 79
$cluster[[5]]
Competitiveness
Bankruptcy N A P
B 104 3 0
NB 1 50 92
$cluster[[6]]
Operating.Risk
Bankruptcy N A P
B 64 24 19
NB 50 32 61
Observamos que en los casos mencionados anteriormente concuerdan con
lo que se dijo de una alta relación. Es fácil ver que una
Financial.Flexibility negativa (N) suele
llevar a tener bancarrota (Bankruptcy en B).
Por el contrario, una positiva tiene fuerte relación a lo contrario. De
manera similar pasa con Credibility y
Competitiveness.
Contrastaremos los resultados con los gráficos de Mosaico de los
casos más relevantes. Por cuestiones de no saturar con demasiados plots,
se muestra lo que ocurre con el método de cluster (similar
a lo que ocurre con interval).
En el caso de los mosaicos, los “Pearson residuals” indican si la proporción de casos observados en cada celda es mayor o menor de lo esperado bajo la independencia.
En el caso de las asociaciones, los “Pearson residuals” se utilizan para resaltar las celdas de la tabla de contingencia que contribuyen más a la asociación observada entre las variables.
Figure 3. Plots de mosaico y de asociación para las distintas variables (método de cluster).
Figure 3. Plots de mosaico y de asociación para las distintas variables (método de cluster).
Figure 3. Plots de mosaico y de asociación para las distintas variables (método de cluster).
Figure 3. Plots de mosaico y de asociación para las distintas variables (método de cluster).
Figure 3. Plots de mosaico y de asociación para las distintas variables (método de cluster).
Figure 3. Plots de mosaico y de asociación para las distintas variables (método de cluster).
Puede verse claramente lo que se comentaba anteriormente. En estas 3
variables hay cierta predisposición a que no haya bancarrota si se tiene
un resultado Average o Positive (sobre todo).
Justamente con Negative hay predisposición a lo contrario,
entrar en bancarrota.
Encontrar las reglas de asociación básicamente significa encontrar que elementos aparecen juntos con más frecuencia que otros.
Transformaremos en primer lugar el conjunto de datos en forma de
data.frame en transactions con el nombre
QBt. Se hace un summary() de esta nueva
estructura.
Se muestra los resultados a partir de ahora solo con el método de
cluster, puesto que consideramos que es el que mejor se
adapta a la estructura subyacente en nuestro conjunto de datos. De todas
formas, al final se mostrará la accuracy que se obtendría
con las otras formas de discretizar.
transactions as itemMatrix in sparse format with
250 rows (elements/itemsets/transactions) and
20 columns (items) and a density of 0.35
most frequent items:
Bankruptcy=NB Financial.Flexibility=N Management.Risk=N Operating.Risk=N
143 121 120 114
Bankruptcy=B (Other)
107 1145
element (itemset/transaction) length distribution:
sizes
7
250
Min. 1st Qu. Median Mean 3rd Qu. Max.
7 7 7 7 7 7
includes extended item information - examples:
labels variables levels
1 Industrial.Risk=N Industrial.Risk N
2 Industrial.Risk=A Industrial.Risk A
3 Industrial.Risk=P Industrial.Risk P
includes extended transaction information - examples:
transactionID
1 1
2 2
3 3
labels variables levels
1 Industrial.Risk=N Industrial.Risk N
2 Industrial.Risk=A Industrial.Risk A
3 Industrial.Risk=P Industrial.Risk P
4 Management.Risk=N Management.Risk N
5 Management.Risk=A Management.Risk A
6 Management.Risk=P Management.Risk P
7 Financial.Flexibility=N Financial.Flexibility N
8 Financial.Flexibility=A Financial.Flexibility A
9 Financial.Flexibility=P Financial.Flexibility P
10 Credibility=N Credibility N
11 Credibility=A Credibility A
12 Credibility=P Credibility P
13 Competitiveness=N Competitiveness N
14 Competitiveness=A Competitiveness A
15 Competitiveness=P Competitiveness P
16 Operating.Risk=N Operating.Risk N
17 Operating.Risk=A Operating.Risk A
18 Operating.Risk=P Operating.Risk P
19 Bankruptcy=B Bankruptcy B
20 Bankruptcy=NB Bankruptcy NB
[1] "Industrial.Risk=N" "Industrial.Risk=A" "Industrial.Risk=P"
[4] "Management.Risk=N" "Management.Risk=A" "Management.Risk=P"
[7] "Financial.Flexibility=N" "Financial.Flexibility=A" "Financial.Flexibility=P"
[10] "Credibility=N" "Credibility=A" "Credibility=P"
[13] "Competitiveness=N" "Competitiveness=A" "Competitiveness=P"
[16] "Operating.Risk=N" "Operating.Risk=A" "Operating.Risk=P"
[19] "Bankruptcy=B" "Bankruptcy=NB"
Como puede verse, tenemos un total de 250 filas / itemsets, así como 20 columnas / items que representan todas las posibilidades de variables con sus posibles niveles.
Los 5 items más frecuentes (con nivel correspondiente) se muestran a continuación.
Figure 4. Ítems más frecuentes en el conjunto de datos
Una tabla de contingencia entre todos los pares de variables (combinación de pares de items) se muestra a continuación:
Industrial.Risk=N Industrial.Risk=A Industrial.Risk=P Management.Risk=N
Industrial.Risk=N 91 0 0 66
Industrial.Risk=A 0 79 0 22
Industrial.Risk=P 0 0 80 32
Management.Risk=N 66 22 32 120
Management.Risk=A 10 35 21 0
Management.Risk=P 15 22 27 0
Financial.Flexibility=N 52 40 29 74
Financial.Flexibility=A 22 24 24 24
Financial.Flexibility=P 17 15 27 22
Credibility=N 38 24 32 61
Credibility=A 26 23 24 30
Credibility=P 27 32 24 29
Competitiveness=N 54 27 24 70
Competitiveness=A 14 21 18 21
Competitiveness=P 23 31 38 29
Operating.Risk=N 52 25 37 65
Operating.Risk=A 19 27 10 29
Operating.Risk=P 20 27 33 26
Bankruptcy=B 54 27 26 73
Bankruptcy=NB 37 52 54 47
Management.Risk=A Management.Risk=P Financial.Flexibility=N
Industrial.Risk=N 10 15 52
Industrial.Risk=A 35 22 40
Industrial.Risk=P 21 27 29
Management.Risk=N 0 0 74
Management.Risk=A 66 0 27
Management.Risk=P 0 64 20
Financial.Flexibility=N 27 20 121
Financial.Flexibility=A 21 25 0
Financial.Flexibility=P 18 19 0
Credibility=N 24 9 84
Credibility=A 18 25 19
Credibility=P 24 30 18
Competitiveness=N 21 14 99
Competitiveness=A 10 22 7
Competitiveness=P 35 28 15
Operating.Risk=N 23 26 62
Operating.Risk=A 22 5 32
Operating.Risk=P 21 33 27
Bankruptcy=B 21 13 102
Bankruptcy=NB 45 51 19
Financial.Flexibility=A Financial.Flexibility=P Credibility=N Credibility=A
Industrial.Risk=N 22 17 38 26
Industrial.Risk=A 24 15 24 23
Industrial.Risk=P 24 27 32 24
Management.Risk=N 24 22 61 30
Management.Risk=A 21 18 24 18
Management.Risk=P 25 19 9 25
Financial.Flexibility=N 0 0 84 19
Financial.Flexibility=A 70 0 6 28
Financial.Flexibility=P 0 59 4 26
Credibility=N 6 4 94 0
Credibility=A 28 26 0 73
Credibility=P 36 29 0 0
Competitiveness=N 4 2 84 17
Competitiveness=A 30 16 4 21
Competitiveness=P 36 41 6 35
Operating.Risk=N 25 27 58 29
Operating.Risk=A 12 12 20 16
Operating.Risk=P 33 20 16 28
Bankruptcy=B 4 1 87 16
Bankruptcy=NB 66 58 7 57
Credibility=P Competitiveness=N Competitiveness=A Competitiveness=P
Industrial.Risk=N 27 54 14 23
Industrial.Risk=A 32 27 21 31
Industrial.Risk=P 24 24 18 38
Management.Risk=N 29 70 21 29
Management.Risk=A 24 21 10 35
Management.Risk=P 30 14 22 28
Financial.Flexibility=N 18 99 7 15
Financial.Flexibility=A 36 4 30 36
Financial.Flexibility=P 29 2 16 41
Credibility=N 0 84 4 6
Credibility=A 0 17 21 35
Credibility=P 83 4 28 51
Competitiveness=N 4 105 0 0
Competitiveness=A 28 0 53 0
Competitiveness=P 51 0 0 92
Operating.Risk=N 27 64 15 35
Operating.Risk=A 20 21 12 23
Operating.Risk=P 36 20 26 34
Bankruptcy=B 4 104 3 0
Bankruptcy=NB 79 1 50 92
Operating.Risk=N Operating.Risk=A Operating.Risk=P Bankruptcy=B
Industrial.Risk=N 52 19 20 54
Industrial.Risk=A 25 27 27 27
Industrial.Risk=P 37 10 33 26
Management.Risk=N 65 29 26 73
Management.Risk=A 23 22 21 21
Management.Risk=P 26 5 33 13
Financial.Flexibility=N 62 32 27 102
Financial.Flexibility=A 25 12 33 4
Financial.Flexibility=P 27 12 20 1
Credibility=N 58 20 16 87
Credibility=A 29 16 28 16
Credibility=P 27 20 36 4
Competitiveness=N 64 21 20 104
Competitiveness=A 15 12 26 3
Competitiveness=P 35 23 34 0
Operating.Risk=N 114 0 0 64
Operating.Risk=A 0 56 0 24
Operating.Risk=P 0 0 80 19
Bankruptcy=B 64 24 19 107
Bankruptcy=NB 50 32 61 0
Bankruptcy=NB
Industrial.Risk=N 37
Industrial.Risk=A 52
Industrial.Risk=P 54
Management.Risk=N 47
Management.Risk=A 45
Management.Risk=P 51
Financial.Flexibility=N 19
Financial.Flexibility=A 66
Financial.Flexibility=P 58
Credibility=N 7
Credibility=A 57
Credibility=P 79
Competitiveness=N 1
Competitiveness=A 50
Competitiveness=P 92
Operating.Risk=N 50
Operating.Risk=A 32
Operating.Risk=P 61
Bankruptcy=B 0
Bankruptcy=NB 143
Vemos aquí que el número más elevado se obtiene entre la combinación
de Bankruptcy = B y
Financial.Flexibility = N.
support = 10% y
confidence = 100%.Support. El soporte de una regla de asociación se
refiere a la proporción de transacciones en un conjunto de datos que
contienen todos los elementos que forman parte de la regla. En este
caso, un support del 10% significa que una regla debe aplicarse al menos
al 10% de las transacciones del conjunto de datos para considerarse
significativa.
Confidence. La confianza de una regla de asociación
se refiere a la probabilidad condicional de que la parte consecuente de
la regla (el lado derecho) ocurra en una transacción, dado que la parte
antecedente de la regla (el lado izquierdo) también ocurra en la misma
transacción. Una confidence del 100% significa que cada vez que se
cumplen las condiciones en el lado izquierdo de la regla, el resultado
en el lado derecho también ocurre siempre.
Al definir reglas de asociación con un support del 10% y una
confidence del 100%, se están buscando reglas que sean relativamente
comunes en el conjunto de datos (al menos el 10% de las transacciones) y
que tengan una certeza absoluta en cuanto a su aplicación Utilizamos la
función apriori() del paquete arules para este
cometido.
Se han obtenido un total de 88 reglas (ver código ejecutado para ello, aquí no se muestra en aras de brevedad y claridad.)
Las reglas pueden representarse en un grafo interactivo:
Figure 5. Grafo de las reglas con un support = 10% y confidence = 100%
Resulta obvio de ver que en el grafo tenemos 2 zonas bien
diferenciadas: por una la que se relaciona con
Bankruptcy = B y por otra la que se relaciona con
Bankruptcy = NB.
Se muestran a continuación las 3 primeras reglas ordenadas por
lift. Esto es lo que nos dice si una regla es predictiva o
no predictiva, siendo la confianza corregida por la consecuencia.
\[\textrm{lift} = \frac{\textrm{conf}}{\textrm{support of consequent}}\]
Un lift mayor que 1 indica que la ocurrencia de los elementos del antecedente de la regla aumenta la probabilidad de que ocurran los elementos del consecuente en comparación con su ocurrencia general. Esto sugiere una asociación positiva entre los elementos del antecedente y del consecuente.
El lift nos permite entender la importancia relativa de una regla de asociación al comparar su ocurrencia con la ocurrencia esperada en ausencia de la regla.
lhs rhs support confidence coverage lift count
[1] {Industrial.Risk=P,
Bankruptcy=B} => {Credibility=N} 0.104 1 0.104 2.659574 26
[2] {Industrial.Risk=P,
Financial.Flexibility=N,
Bankruptcy=B} => {Credibility=N} 0.104 1 0.104 2.659574 26
[3] {Industrial.Risk=A,
Bankruptcy=B} => {Competitiveness=N} 0.108 1 0.108 2.380952 27
Vemos que las reglas mostradas cuentan con un valor de
lift suficientemente elevado para su credibilidad.
Bankruptcy = B.A continuación obtenemos las reglas de asociación que tengan como
antecedente Bankruptcy = B. Reduciremos el número
de reglas utilizando las condiciones lift > 2 y
count > 50.
lhs rhs support confidence coverage lift count
[1] {Industrial.Risk=N,
Bankruptcy=B} => {Competitiveness=N} 0.216 1 0.216 2.380952 54
[2] {Operating.Risk=N,
Bankruptcy=B} => {Competitiveness=N} 0.256 1 0.256 2.380952 64
[3] {Credibility=N,
Operating.Risk=N,
Bankruptcy=B} => {Competitiveness=N} 0.216 1 0.216 2.380952 54
[4] {Financial.Flexibility=N,
Operating.Risk=N,
Bankruptcy=B} => {Competitiveness=N} 0.240 1 0.240 2.380952 60
Podemos representar las reglas (sin aplicar las condiciones) haciendo
uso de plot().
To reduce overplotting, jitter is added! Use jitter = 0 to prevent jitter.
Figure 6. Ubicación de las reglas con atecedente
Bankruptcy = B en el espacio lift-support, coloreadas por
su count.
Figure 7. Grafo de las reglas con antecedente
Bankruptcy = B con lift > 2 y count > 50.
Un patrón interesante es que todas estas reglas tienen como
consecuente (rhs) Competitiveness = N.
Bankruptcy (ni
lhs ni rhs).Se utiliza un subset() con lo obtenido anteriormente
para que no aparezca dicha variable, hallándose un total de 8
reglas.
set of 8 rules
rule length distribution (lhs + rhs):sizes
3 4 5
2 5 1
Min. 1st Qu. Median Mean 3rd Qu. Max.
3.000 3.750 4.000 3.875 4.000 5.000
summary of quality measures:
support confidence coverage lift count
Min. :0.108 Min. :1 Min. :0.108 Min. :2.066 Min. :27.00
1st Qu.:0.114 1st Qu.:1 1st Qu.:0.114 1st Qu.:2.381 1st Qu.:28.50
Median :0.138 Median :1 Median :0.138 Median :2.381 Median :34.50
Mean :0.139 Mean :1 Mean :0.139 Mean :2.342 Mean :34.75
3rd Qu.:0.152 3rd Qu.:1 3rd Qu.:0.152 3rd Qu.:2.381 3rd Qu.:38.00
Max. :0.200 Max. :1 Max. :0.200 Max. :2.381 Max. :50.00
mining info:
data ntransactions support confidence
QBt$cluster 250 0.1 1
call
apriori(data = QBt$cluster, parameter = list(support = support, confidence = confidence, target = "rules"))
lhs rhs support confidence coverage lift count
[1] {Industrial.Risk=A,
Competitiveness=N} => {Financial.Flexibility=N} 0.108 1 0.108 2.066116 27
[2] {Industrial.Risk=N,
Credibility=N} => {Competitiveness=N} 0.152 1 0.152 2.380952 38
[3] {Industrial.Risk=N,
Management.Risk=N,
Credibility=N} => {Competitiveness=N} 0.108 1 0.108 2.380952 27
[4] {Industrial.Risk=N,
Financial.Flexibility=N,
Credibility=N} => {Competitiveness=N} 0.136 1 0.136 2.380952 34
[5] {Industrial.Risk=N,
Management.Risk=N,
Financial.Flexibility=N} => {Competitiveness=N} 0.152 1 0.152 2.380952 38
[6] {Financial.Flexibility=N,
Credibility=N,
Operating.Risk=N} => {Competitiveness=N} 0.200 1 0.200 2.380952 50
[7] {Management.Risk=N,
Financial.Flexibility=N,
Operating.Risk=N} => {Competitiveness=N} 0.140 1 0.140 2.380952 35
[8] {Management.Risk=N,
Financial.Flexibility=N,
Credibility=N,
Operating.Risk=N} => {Competitiveness=N} 0.116 1 0.116 2.380952 29
Pasa a graficarse a continuación en modo de grafo lo obtenido:
Figure 8. Grafo de las reglas que no tienen Bankruptcy ni
en atecedente ni consecuente.
Las reglas de asociación, incluso cuando no incluyen la variable
objetivo, pueden ser valiosas para comprender relaciones entre otras
variables en el conjunto de datos. Destaca aquí por ejemplo la regla de
{Financial.Flexibility = N, Credibility = N, Operating.Risk = N} => {Competitiveness = N}.
La regla sugiere que cuando una empresa afronta dificultades financieras, falta de credibilidad y alto riesgo operativo, es probable que la competitividad se vea afectada negativamente.
Pasamos ahora a desarrollar un modelo de clasificación basado en Reglas de Asociación para estimar la bancarrota. Se hallará la bondad del modelo (sensibilidad y especifidad), diviendo el conjunto de datos en training (80%) y testing (20%).
Dividimos nuestro conjunto de datos en train y test con una
proporción de 80% - 20%, respectivamente. Para hallo hacemos usado de la
función createDataPartition del paquete
caret.
Puede comprobarse que la proporción de clases en train y test es prácticamente la misma:
Veamos primero lo que nos ofrece el modelo de OneR. Este
es un algoritmo de clasificación simple, pero preciso, que genera una
regla para cada predictor en los datos, y luego selecciona la regla con
el error total más pequeño como su “regla única”.
Call:
OneR.formula(formula = Bankruptcy ~ ., data = trainData)
Rules:
If Competitiveness = N then Bankruptcy = B
If Competitiveness = A then Bankruptcy = NB
If Competitiveness = P then Bankruptcy = NB
Accuracy:
198 of 201 instances classified correctly (98.51%)
Contingency table:
Competitiveness
Bankruptcy N A P Sum
B * 84 2 0 86
NB 1 * 39 * 75 115
Sum 85 41 75 201
---
Maximum in each column: '*'
Pearson's Chi-squared test:
X-squared = 189.19, df = 2, p-value < 2.2e-16
Vemos que se obtiene una accuracy del 98% (en conjunto
de train) con un modelo tan sencillo de regla única, lo cual es bastante
sorprendente. El p-valor tan bajo indica que hay una asociación
significativa entre las variables de Competitiveness y
Bankruptcy.
Veamos qué nos ofrece la función confusionMatrix del
paquete caret al aplicarla a nuestro conjunto de
train.
Confusion Matrix and Statistics
Reference
Prediction B NB
B 84 1
NB 2 114
Accuracy : 0.9851
95% CI : (0.957, 0.9969)
No Information Rate : 0.5721
P-Value [Acc > NIR] : <2e-16
Kappa : 0.9695
Mcnemar's Test P-Value : 1
Sensitivity : 0.9767
Specificity : 0.9913
Pos Pred Value : 0.9882
Neg Pred Value : 0.9828
Prevalence : 0.4279
Detection Rate : 0.4179
Detection Prevalence : 0.4229
Balanced Accuracy : 0.9840
'Positive' Class : B
La sensibilidad (Sensivity) representa la proporción de
positivos reales que se clasificaron correctamente como positivos,
mientras que la especificidad (Specifity) representa la
proporción de negativos reales que se clasificaron correctamente como
negativos.
Confusion Matrix and Statistics
Reference
Prediction B NB
B 20 0
NB 1 28
Accuracy : 0.9796
95% CI : (0.8915, 0.9995)
No Information Rate : 0.5714
P-Value [Acc > NIR] : 4.656e-11
Kappa : 0.9581
Mcnemar's Test P-Value : 1
Sensitivity : 0.9524
Specificity : 1.0000
Pos Pred Value : 1.0000
Neg Pred Value : 0.9655
Prevalence : 0.4286
Detection Rate : 0.4082
Detection Prevalence : 0.4082
Balanced Accuracy : 0.9762
'Positive' Class : B
En el conjunto de testing se obtuvo un accuracy de 1
para esta partición de los datos, si bien es cierto que el intervalo de
confianza del 95% de esta va hasta 0.9275 en la cota inferior.
Las siglas de CBA responden a Classification Based
on Associations.
En CBA, se extraen reglas de asociación a partir de los datos y luego se utilizan estas reglas para clasificar nuevas instancias. Estas reglas de asociación pueden proporcionar información sobre cómo las variables predictoras están relacionadas entre sí y con la variable objetivo.
En el proceso general se tiene:
Pasemos a aplicar el modelo con un support = 0.2 y
confidence = 1.
Pasamos a inspeccionar las reglas de este:
lhs rhs support confidence coverage
[1] {Financial.Flexibility=N, Competitiveness=N} => {Bankruptcy=B} 0.4029851 1.0000000 0.4029851
[2] {Credibility=N, Competitiveness=N} => {Bankruptcy=B} 0.3432836 1.0000000 0.3432836
[3] {Financial.Flexibility=N, Credibility=N} => {Bankruptcy=B} 0.3432836 1.0000000 0.3432836
[4] {Industrial.Risk=N, Competitiveness=N} => {Bankruptcy=B} 0.2089552 1.0000000 0.2089552
[5] {Competitiveness=P} => {Bankruptcy=NB} 0.3731343 1.0000000 0.3731343
[6] {} => {Bankruptcy=NB} 0.5721393 0.5721393 1.0000000
lift count size coveredTransactions totalErrors
[1] 2.337209 81 3 81 5
[2] 2.337209 69 3 2 3
[3] 2.337209 69 3 2 1
[4] 2.337209 42 3 1 0
[5] 1.747826 75 2 75 5
[6] 1.000000 201 1 40 0
Se muestra el plot y grafo:
To reduce overplotting, jitter is added! Use jitter = 0 to prevent jitter.
Figure 9. Ubicación de las reglas en el espacio lift-support.
Figure 10. Grafo de las reglas del modelo de CBA escogido (support = 0.2, confidence = 1).
Evaluamos el modelo CBA sobre los conjuntos de entrenamiento y test:
Confusion Matrix and Statistics
Reference
Prediction B NB
B 86 0
NB 0 115
Accuracy : 1
95% CI : (0.9818, 1)
No Information Rate : 0.5721
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 1
Mcnemar's Test P-Value : NA
Sensitivity : 1.0000
Specificity : 1.0000
Pos Pred Value : 1.0000
Neg Pred Value : 1.0000
Prevalence : 0.4279
Detection Rate : 0.4279
Detection Prevalence : 0.4279
Balanced Accuracy : 1.0000
'Positive' Class : B
Obtenemos en el propio conjunto de training un accuracy
de 1, lo que resulta algo mejor que en el modelo de regla única del
OneR.
Confusion Matrix and Statistics
Reference
Prediction B NB
B 21 0
NB 0 28
Accuracy : 1
95% CI : (0.9275, 1)
No Information Rate : 0.5714
P-Value [Acc > NIR] : 1.233e-12
Kappa : 1
Mcnemar's Test P-Value : NA
Sensitivity : 1.0000
Specificity : 1.0000
Pos Pred Value : 1.0000
Neg Pred Value : 1.0000
Prevalence : 0.4286
Detection Rate : 0.4286
Detection Prevalence : 0.4286
Balanced Accuracy : 1.0000
'Positive' Class : B
En el conjunto de test también se obtiene un accuracy de
1.
La evaluación de los modelos se realizó anteriormente solo con
cluster, puesto que se determinó que sería el más ideal
para predecir de manera correcta. A continuación se muestran los
resultados que se obtendrían para uno de los otros dos métodos, tanto en
conjunto de training como de testing.
[1] "Matriz de confusión para interval en conjunto de entrenamiento:"
Confusion Matrix and Statistics
Reference
Prediction B NB
B 85 0
NB 1 115
Accuracy : 0.995
95% CI : (0.9726, 0.9999)
No Information Rate : 0.5721
P-Value [Acc > NIR] : <2e-16
Kappa : 0.9898
Mcnemar's Test P-Value : 1
Sensitivity : 0.9884
Specificity : 1.0000
Pos Pred Value : 1.0000
Neg Pred Value : 0.9914
Prevalence : 0.4279
Detection Rate : 0.4229
Detection Prevalence : 0.4229
Balanced Accuracy : 0.9942
'Positive' Class : B
[1] "Matriz de confusión para interval en conjunto de prueba:"
Confusion Matrix and Statistics
Reference
Prediction B NB
B 21 0
NB 0 28
Accuracy : 1
95% CI : (0.9275, 1)
No Information Rate : 0.5714
P-Value [Acc > NIR] : 1.233e-12
Kappa : 1
Mcnemar's Test P-Value : NA
Sensitivity : 1.0000
Specificity : 1.0000
Pos Pred Value : 1.0000
Neg Pred Value : 1.0000
Prevalence : 0.4286
Detection Rate : 0.4286
Detection Prevalence : 0.4286
Balanced Accuracy : 1.0000
'Positive' Class : B
[1] "Matriz de confusión para frequency en conjunto de entrenamiento:"
Confusion Matrix and Statistics
Reference
Prediction B NB
B 66 0
NB 20 115
Accuracy : 0.9005
95% CI : (0.8505, 0.9382)
No Information Rate : 0.5721
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 0.7906
Mcnemar's Test P-Value : 2.152e-05
Sensitivity : 0.7674
Specificity : 1.0000
Pos Pred Value : 1.0000
Neg Pred Value : 0.8519
Prevalence : 0.4279
Detection Rate : 0.3284
Detection Prevalence : 0.3284
Balanced Accuracy : 0.8837
'Positive' Class : B
[1] "Matriz de confusión para frequency en conjunto de prueba:"
Confusion Matrix and Statistics
Reference
Prediction B NB
B 17 0
NB 4 28
Accuracy : 0.9184
95% CI : (0.804, 0.9773)
No Information Rate : 0.5714
P-Value [Acc > NIR] : 9.314e-08
Kappa : 0.8293
Mcnemar's Test P-Value : 0.1336
Sensitivity : 0.8095
Specificity : 1.0000
Pos Pred Value : 1.0000
Neg Pred Value : 0.8750
Prevalence : 0.4286
Detection Rate : 0.3469
Detection Prevalence : 0.3469
Balanced Accuracy : 0.9048
'Positive' Class : B
Vemos que con el método de frequency se obtienen
resultados bastante peores, tal y como se podía intuir (la
discretización deja mucho que desear) en la Figura 2. El método de
interval obtiene resultados similares que los que vimos en
cluster.
Se obtuvieron resultados ligeramente mejores con el modelo
CBA frente al modelo de OneR, llegando a un
accuracy de 1 tanto en conjunto de training como de test
con el método de cluster de discretize(). En
el modelo de CBA se emplearon todas las variables, ya que se consideró
que todas podrían ser de ayuda a la hora de buscar relaciones. Eso sí,
se estableció un support mínimo de 0.2 y un
confidence de 1 con el fin de tratar de hallar reglas de
cierto nivel de calidad para la predicción.
En resumen, podemos decir que los modelos utilizados resultaron muy
efectivos para predecir la variable objetivo Bankruptcy en
este conjunto de datos, dándonos una idea de la potencia que tienen
cuando se tienen escaso número de datos.